package com.ty.wx.controller;

import com.ty.bean.Courier;
import com.ty.bean.Message;
import com.ty.bean.User;
import com.ty.bean.UserAndCourier;
import com.ty.mvc.ResponseBody;
import com.ty.service.BaseCourierService;
import com.ty.service.BaseUserService;
import com.ty.service.impl.BaseCourierServiceImpl;
import com.ty.service.impl.BaseUserServiceImpl;
import com.ty.util.JSONUtil;
import com.ty.util.RandomUtil;
import com.ty.util.SMSUtil;
import com.ty.util.UserUtil;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * @author 田野
 */
public class UserController {
    private BaseUserService userService = new BaseUserServiceImpl();
    private BaseCourierService courierService = new BaseCourierServiceImpl();
    @ResponseBody("/wx/loginSMS.do")
    public String sendMSM(HttpServletRequest request, HttpServletResponse response){
        String userPhone = request.getParameter("userPhone");
        System.out.println("loginSMS请求的手机号码参数：" + userPhone);
        Message message = new Message();

        // 首先在这里就应该进行数据库的查询，看是否在数据库中有对应号码的注册用户或者是快递员员
        // 首先根据号码去数据库中查询
        User userByPhone = userService.findByPhone(userPhone);
        Courier courierByPhone = courierService.findByPhone(userPhone);

        if (userByPhone == null && courierByPhone == null){
            // 既不是普通用户，又不是快递员
            // TODO:阿里云短信服务有点问题，模拟这个为发送的短信
            // TODO:先将这个发送短信的状态置为成功
            // TODO:先将这个发送短信的状态置为成功
            // TODO:先将这个发送短信的状态置为成功
            // TODO:先将这个发送短信的状态置为成功
            /*String checkCode = RandomUtil.getCheckCode();
            boolean flag = SMSUtil.loginSMS(userPhone, checkCode);*/
            String checkCode = "123456";
            boolean flag = true;
            System.out.println("注册验证码：" + checkCode);

            if (flag){
                // 注册验证码发送成功
                message.setStatus(-2);
                message.setResult("注册验证码已发送，请注意查收！");
                HttpSession session = request.getSession();
                session.setAttribute("registerPhone", userPhone);
                session.setAttribute("registerCode", checkCode);
            }else {
                // 诸恶验证码发送失败
                message.setStatus(-3);
                message.setResult("注册验证码发送失败，请检查手机号或者稍后再试!");
            }

            String json = JSONUtil.toJSON(message);
            return json;
        }
        // TODO:阿里云短信服务有点问题，模拟这个为发送的短信
        // TODO:先将这个发送短信的状态置为成功
        // TODO:先将这个发送短信的状态置为成功
        // TODO:先将这个发送短信的状态置为成功
        // TODO:先将这个发送短信的状态置为成功
        /*String checkCode = RandomUtil.getCheckCode();
        boolean flag = SMSUtil.loginSMS(userPhone, checkCode);*/

        String checkCode = "123456";
        boolean flag = true;

        System.out.println("验证码：" + checkCode);
        if (flag){
            // 发送成功
            message.setStatus(0);
            message.setResult("验证码已发送，请注意查收！");
            UserUtil.setLoginSMS(request.getSession(), userPhone, checkCode);
        }else {
            // 发送失败
            message.setStatus(-1);
            message.setResult("验证码发送失败，请检查手机号或者稍后再试!");

        }

        String json = JSONUtil.toJSON(message);
        return json;

    }


    @ResponseBody("/wx/login.do")
    public String login(HttpServletRequest request, HttpServletResponse response){
        String userPhone = request.getParameter("userPhone");
        String userCode = request.getParameter("code");

        String sysCode = UserUtil.getLoginSMS(request.getSession(), userPhone);

        Message message = new Message();
        if (sysCode == null){
            // 这个手机号未获取短信
            message.setStatus(-1);
            message.setResult("手机号码未获取到验证短信！");
        }else if (sysCode.equals(userCode)){
            // 手机号码接收到的验证码和系统一致

            // 判断登录的身份，存在两种身份：用户和快递员
            // 先从数据库中根据手机号码去查，如果这个手机号码
            // TODO:判断登录的身份，存在两种身份：用户和快递员
            User userByPhone = userService.findByPhone(userPhone);
            Courier courierByPhone = courierService.findByPhone(userPhone);
            if (userByPhone != null && courierByPhone == null){
                // 只是普通的用户身份 0
                message.setStatus(0);
                User user = new User();
                user.setPhone(userPhone);
                UserUtil.setWxUser(request.getSession(), user);
            }else if (courierByPhone != null && userByPhone == null){
                // 只是快递员
                // 直接跳转到快递员相关的操作页面(快递员操作页面包括普通用户操作页面)
                message.setStatus(1);
                Courier courier = new Courier();
                courier.setPhone(userPhone);
                UserUtil.setWxCourier(request.getSession(), courier);

            }else if (courierByPhone != null && userByPhone != null){
                // 既是快递员又是普通用户
                message.setStatus(2);
                User user = new User();
                user.setPhone(userPhone);
                UserUtil.setWxUser(request.getSession(), user);

                Courier courier = new Courier();
                courier.setPhone(userPhone);
                UserUtil.setWxCourier(request.getSession(), courier);

            } else {
                // 其他的情况，即两个都为空，那么提示此时去注册（普通用户注册），
                // 如果是在发送短信之前查询了数据库，那么这种情况是不会出现的


            }

        }else {
            // 验证码不一致，登录失败
            message.setStatus(-2);
            message.setResult("验证码不一致，请检查！");
        }
        String json = JSONUtil.toJSON(message);
        return json;
    }

    @ResponseBody("/wx/userInfo.do")
    public String userInfo(HttpServletRequest request, HttpServletResponse response){
        User wxUser = UserUtil.getWxUser(request.getSession());
        Courier wxCourier = UserUtil.getWxCourier(request.getSession());
        Message message = new Message();
        if (wxUser != null && wxCourier == null){
            // 只是普通用户身份
            message.setStatus(0);
            message.setResult("用户:" + wxUser.getPhone());
            message.setData(wxUser);
        }else if (wxUser == null && wxCourier != null){
            // 只是快递员身份
            message.setStatus(1);
            message.setResult("快递员:" + wxCourier.getPhone());
            message.setData(wxCourier);
        } else if (wxUser != null && wxCourier != null){
            // 快递员和用户身份
            UserAndCourier userAndCourier = new UserAndCourier();
            userAndCourier.setUser(wxUser);
            userAndCourier.setCourier(wxCourier);
            message.setStatus(2);
            message.setResult("用户和快递员:" + wxCourier.getPhone());
            message.setData(userAndCourier);
        }else {
            // 这种情况理论上不存在，因为登都登上去了，必定有一个身份
            // 如果出现了就非常奇怪
            message.setStatus(-1);
        }

        String json = JSONUtil.toJSON(message);
        return json;

    }

    @ResponseBody("/wx/logout.do")
    public String logout(HttpServletRequest request, HttpServletResponse response){
        // 1、销毁session
        HttpSession session = request.getSession();
        session.invalidate();
        // 2、给客户端回复消息
        Message message = new Message();
        message.setStatus(0);
        return JSONUtil.toJSON(message);
    }

    @ResponseBody("/wx/register.do")
    public String registerByType(HttpServletRequest request, HttpServletResponse response){
        String type = request.getParameter("type");
        String name = request.getParameter("name");
        String phone = request.getParameter("phone");
        String password = request.getParameter("password");
        String msg = request.getParameter("msg");
        Message message = new Message();

        if ("上帝".equals(type) && request.getSession().getAttribute("registerCode").equals(msg)){
            // 用户注册
            User user = new User();
            user.setName(name);
            user.setPhone(phone);
            user.setPassword(password);
            boolean insert = userService.insert(user);

            if (insert){
                // 注册成功
                message.setStatus(0);
                message.setResult("用户注册成功，即将跳转到登录页面！");
            }else {
                // 注册失败
                message.setStatus(0);
                message.setResult("用户注册失败，请重新注册！");
            }

        }else if ("打工人".equals(type)){
            // 快递员注册
            Courier courier = new Courier();
            courier.setName(name);
            courier.setPhone(phone);
            courier.setIdCard("422828196707066731");
            courier.setPassword(password);
            courier.setInfo("又是一个等待被压榨的打工人！");
            boolean insert = courierService.insert(courier);
            if (insert){
                // 注册成功
                message.setStatus(0);
                message.setResult("快递员注册成功，即将跳转到登录页面！");
            }else {
                // 注册失败
                message.setStatus(0);
                message.setResult("快递员注册失败，请重新注册！");
            }

        }

        String json = JSONUtil.toJSON(message);

        return json;

    }


}
